/*
 * PictavoreApp.groovy
 */

package com.pictavore

import org.jdesktop.application.Application
import org.jdesktop.application.SingleFrameApplication
import com.pictavore.plugin.PluginManager
import com.pictavore.plugin.Plugin
import com.google.inject.Module
import com.google.inject.Guice
import com.google.inject.Binder
import com.google.inject.Inject
import com.google.inject.Injector
import com.google.inject.Singleton

import com.pictavore.gui.ImageView;

/**
 * The main class of the application.
 */
@Singleton
public class PictavoreApp extends SingleFrameApplication {
    /**
     * At startup create and show the main frame of the application.
     */
    @Override protected void startup() {
        // inject some guice
        Injector injector = Guice.createInjector(new PictavoreModule(this))

        def pictavore = injector.getInstance(Pictavore)
        def pluginManager = pictavore.pluginManager
        pluginManager.plugins.each { plugin ->
            println "Loading ${plugin}"
        }

        def imageView = injector.getInstance(ImageView)
        imageView.init()

        show(imageView)
    }

    /**
     * This method is to initialize the specified window by injecting resources.
     * Windows shown in our application come fully initialized from the GUI
     * builder, so this additional configuration is not needed.
     */
    @Override protected void configureWindow(java.awt.Window root) {
    }

    /**
     * A convenient static getter for the application instance.
     * @return the instance of PictavoreApp
     */
    static PictavoreApp getApplication() {
        return Application.getInstance(PictavoreApp.class);
    }

    /**
     * Main method launching the application.
     */
    static void main(String[] args) {
        ExpandoMetaClass.enableGlobally()

        launch(PictavoreApp.class, args);
    }
}

